#include "common-call.h"

// 通用调用游戏 call, 通过主线程来使用
//  args 是 uint64[10] 数组指针
//    args[0]: call 地址
//    args[1]: rcx
//    args[2]: rdx
//    args[3]: r8
//    args[4]: r9
//    args[5]: 参数5
//    args[6]: 参数6
//    args[7]: 参数7
//    args[8]: 参数8
//    args[9]: 参数9
//  如果错误, 返回 -1.
int64 common(uint64 *args) {
  using GameCallPtr =
      uint64 (*)(uint64 rcx, uint64 rdx, uint64 r8, uint64 r9, uint64 arg5,
                 uint64 arg6, uint64 arg7, uint64 arg8, uint64 arg9);
  uint64 ret = 0;
  __try {
    GameCallPtr game_call = (GameCallPtr)args[0];
    ret = game_call(args[1], args[2], args[3], args[4], args[5], args[6],
                    args[7], args[8], args[9]);
  } __except (1) {
    // run_script_call 会报异常
    dbgprintu8("codergege [%s][%03d] 调用异常! Call 地址[%llX] 参数 [%llX] "
               "[%llX] [%llX] [%llX] [%llX] [%llX] [%llX] [%llX] [%llX]\n",
               __FUNCTION__, __LINE__, args[0], args[1], args[2], args[3],
               args[4], args[5], args[6], args[7], args[8], args[9]);
    ret = -1;
  }
  return ret;
}
